package com.baoyouqun.domain.Query;

import com.baoyouqun.domain.Enum.HandleStatusEnum;
import com.baoyouqun.domain.Enum.ReportTypeEnum;
import com.fasterxml.jackson.annotation.JsonSetter;
import com.fasterxml.jackson.annotation.Nulls;
import lombok.Data;

import java.time.LocalDateTime;

/**
 * 举报记录查询条件类（用于后台分页查询、Excel导出筛选）
 * 对齐用户AdminDemandQuery风格：含分页参数+业务筛选条件，字段与Service筛选逻辑一一对应
 */
@Data
public class ReportRecordQueryBack {

    // ======================== 分页基础参数（与用户示例一致） ========================
    /**
     * 当前页码（默认1）
     * 未传参时默认查询第一页，避免空指针
     */
    private Long current = 1L;

    /**
     * 每页条数（默认10）
     * 兼容前端常见分页场景，可手动调整为20/50等
     */
    private Long size = 10L;

    // ======================== 业务筛选参数（与需求完全匹配） ========================
    /**
     * 举报类型（筛选条件）
     * 关联ReportTypeEnum枚举：如SPAM(垃圾信息)、ILLEGAL(违法内容)、ABUSE(辱骂)等
     */
    @JsonSetter(nulls = Nulls.SKIP)
    private ReportTypeEnum reportType;

    /**
     * 处理状态（筛选条件）
     * 关联HandleStatusEnum枚举：如PROCESSED(已违规)、REJECTED(正常)、UNPROCESSED(未处理)等
     */
    private HandleStatusEnum handleStatus;

    /**
     * 举报人姓名（模糊查询条件）
     * 用于筛选指定举报人的记录，Service层会先转成userIdList再IN查询
     */
    private String reporterName;

    /**
     * 举报开始时间（时间范围左边界）
     * 格式：yyyy-MM-dd HH:mm:ss，如2025-08-01 00:00:00
     * 筛选该时间之后创建的举报记录
     */
    private LocalDateTime createTimeStart;

    /**
     * 举报结束时间（时间范围右边界）
     * 格式：yyyy-MM-dd HH:mm:ss，如2025-08-02 23:59:59
     * 筛选该时间之前创建的举报记录
     */
    private LocalDateTime createTimeEnd;

    // ======================== 扩展说明 ========================
    /**
     * 注：举报对象类型（reportTargetType）未在此处添加，因需求中仅需筛选“帖子举报”（post）
     * 已在Service的buildReportWrapper中固定条件：eq(ReportRecord::getReportTargetType, "post")
     * 若后续需支持多类型筛选，可在此处添加String reportTargetType字段
     */
}